/**
 * 安卓白金英雄坛制作组 <br>
 * 文件名：Matrix.java <br>
 * 创建时间：2014-7-7 下午9:01:17 <br>
 * 所属项目：GmudEX <br>
 * @author 12548 <br>
 */
package lostland.gmud.exv2.expand;

import java.util.Arrays;

/**
 * 类名：Matrix <br>
 * 说明：数据结构：矩阵
 *
 * @author ubun
 */
public class Matrix {
	int data[];
	int row;
	int column;

	public Matrix(int column, int row) {
		this.row = row;
		this.column = column;

		data = new int[row * column];
	}

	/**
	 * 设置矩阵元素
	 */
	public void set(int c, int r, int value) {
		int index = r * column + c;
		data[index] = value;
	}

	/**
	 * 获得矩阵元素
	 */
	public int get(int c, int r) {
		return data[r * column + c];
	}

	/**
	 * 用value填充整个矩阵
	 */
	public void fill(int value) {
		Arrays.fill(data, value);
	}

	/**
	 * 用数组rows填充第r行
	 */
	public void fillrow(int r, int[] rows) {
		int start = r * column;
		System.arraycopy(rows, 0, data, start + 0, column);
	}

	/**
	 * 用数组columns填充第c列
	 */
	public void fillcolumn(int c, int[] columns) {
		int start = c;
		for (int n = 0; n < row; n++)
			data[start + (column * n)] = columns[n];
	}

	/**
	 * 非引用的矩阵元素对元素克隆
	 */
	public void clonefrom(Object other) {
		Matrix otherMatrix = (Matrix) other;
		System.arraycopy(otherMatrix.data, 0, data, 0, row * column);
	}


	/* （非 Javadoc）
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + Arrays.hashCode(data);
		return result;
	}

	/* （非 Javadoc）
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Matrix other = (Matrix) obj;
		if (!Arrays.equals(data, other.data))
			return false;
		return true;
	}

	public int[] getData() {
		return data;
	}

	/**
	 * 打印以供调试
	 */
	public String print() {
		String output = "[";
		for (int i : data)
			output += i;
		output += "]";
		return output;
	}
}
